﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Farmacia.Entities;
using Farmacia.BussinessLogic.Almacen.GrupoFarma;
using Farmacia.BussinessLogic.Almacen.Laborat;
using Farmacia.BussinessLogic.Almacen.PrincActivo;
using Farmacia.BussinessLogic;
using Microsoft.Practices.Unity;

namespace Farmacia.net.Ventas.Pedido
{
	public partial class frmGenerarPedido : BasePage<frmGenerarPedido>
	{
        [Dependency]
        public iPedidoBL pedidoBL { get; set; }
        [Dependency]
        public iClienteBL ClienteBL { get; set; }
        [Dependency]
        public iProductoBL ProductoBL { get; set; }
        [Dependency]
        public iProductoAlmacenBL ProductoAlmacenBL { get; set; }
        [Dependency]
        public  iLaboratorioBL LaboratorioBL { get; set; }
        [Dependency]
        public IPrincipioActivoBL PrincActBL { get; set; }
        [Dependency]
        public IGrupoFarmBL GrupFarmaBL { get; set; }
        [Dependency]
        public iProveedorBL ProveedorBL { get; set; }



        private const string VARPEDIDO = "pedido";
        private const string VARPRODUCTO = "producto";
        

		protected void Page_Load(object sender, EventArgs e)
		{
            var acc = Request.QueryString["acc"];
            if (!Page.IsPostBack)
            {
                if (acc != string.Empty)
                {
                    if (acc == "editar")
                    {
                        var pedidoId = Int32.Parse(Request.QueryString["pedidoId"].ToString());

                        var pedido = pedidoBL.GetFromPedidoById(pedidoId);

                        
                        PedidoDataBind(pedido);
                    }
                    else
                    
                    if(acc=="nuevo") 
                    {
                        var pedido = new PedidoNuevo();
                        pedido.IdPedido = 0;
                        pedido.FecPedido = DateTime.Now;
                        pedido.Total = 0;

                        PedidoDataBind(pedido);

                        
                    }
                    
                    }
                
                }

		}
        
        private void PedidoDataBind(PedidoNuevo pedido)
        {
            txtPedido.Text = pedido.IdPedido.ToString();
            txtFecha.Text = pedido.FecPedido.ToShortDateString();
            txtRuc.Text = pedido.Cliente.RucDni;
            txtRazonSocial.Text = pedido.Cliente.RazonSocial;
            txtDirec.Text = pedido.Cliente.Direccion;

            lblTotal.Text = "Total " + pedido.Total;

            GridView1.DataSource = pedido.DetallePedido;
            GridView1.DataBind();

            Cache.Insert(VARPEDIDO, pedido);
        }

        protected void odsCliente_ObjectCreating(object sender, ObjectDataSourceEventArgs e)
        {
            e.ObjectInstance = ClienteBL;
        }

        protected void gvClientes_SelectedIndexChanged(object sender, EventArgs e)
        {
            ModalPopupExtender1.Show();

            var rucCliente = gvClientes.SelectedValue.ToString();
            var cliente = ClienteBL.GetFromClienteByRucDni(rucCliente);

            var pedido = Cache.Get(VARPEDIDO) as PedidoNuevo;

            pedido.Cliente = cliente;
            pedido.IdCliente = cliente.IdCliente;

            txtRuc.Text = cliente.RucDni.ToString();
            txtRazonSocial.Text = cliente.RazonSocial.ToString();
            txtDirec.Text = cliente.Direccion.ToString();

            
           


            PedidoDataBind(pedido);
            

        }

        protected void btnBuscar_Click(object sender, EventArgs e)
        {
            ModalPopupExtender1.Show();
        }

        protected void odsLab_ObjectCreating(object sender, ObjectDataSourceEventArgs e)
        {
            e.ObjectInstance = LaboratorioBL;
        }

        protected void odsGrupFarm_ObjectCreating(object sender, ObjectDataSourceEventArgs e)
        {
            e.ObjectInstance = GrupFarmaBL;
        }

        protected void odsPrinc_ObjectCreating(object sender, ObjectDataSourceEventArgs e)
        {
            e.ObjectInstance = PrincActBL;
        }

        protected void odsProveedor_ObjectCreating(object sender, ObjectDataSourceEventArgs e)
        {
            e.ObjectInstance = ProveedorBL;
        }

        protected void odsProducto_ObjectCreating(object sender, ObjectDataSourceEventArgs e)
        {
            e.ObjectInstance = ProductoBL;
        }

        protected void btnBuscarProducto_Click(object sender, EventArgs e)
        {
            ModalPopupExtender2.Show();
        }

        protected void GridView2_SelectedIndexChanged(object sender, EventArgs e)
        {

                     

        }

        protected void odsStockporUbicación_ObjectCreating(object sender, ObjectDataSourceEventArgs e)
        {
            e.ObjectInstance = ProductoBL;
        }

        protected void odsstockporprod_ObjectCreating(object sender, ObjectDataSourceEventArgs e)
        {
            e.ObjectInstance = ProductoBL;
        }

        protected void GridView4_SelectedIndexChanged(object sender, EventArgs e)
        {
            ModalPopupExtender2.Show();

            var Codigo = GridView4.SelectedValue.ToString();
            var Prod = ProductoAlmacenBL.GetFromProdbyidforpedido(Codigo);


            txtCant.Text = "1";
            txtCodigo.Text = Prod.Codigo.ToString();
            txtDescripcion.Text = Prod.Descripcion.ToString();
            txtUnd.Text = Prod.Und.ToString();
            txtPrecio.Text = Prod.StockUnd.ToString();

            Cache.Insert(VARPRODUCTO, Prod);
        }

        protected void btnAgregar_Click(object sender, EventArgs e)
        {
            var producto = Cache.Get(VARPRODUCTO) as ProdPed;
            var cantidad = decimal.Parse(txtCant.Text);
            var precio = decimal.Parse(txtPrecio.Text);

            DetallePedido newDetalle = new DetallePedido()
            {
                Producto = producto,
                IdProducto = producto.idProducto,
                Precio = precio,
                Cantidad = cantidad,
            };

            var pedido = Cache.Get(VARPEDIDO) as PedidoNuevo;
            newDetalle.Monto = precio * cantidad;
            pedido.DetallePedido.Add(newDetalle);
            pedido.Total = pedido.DetallePedido.Sum(p => p.Monto);
            

            PedidoDataBind(pedido);


        }

        protected void btnRegistrar_Click(object sender, EventArgs e)
        {
            var pedido = Cache.Get(VARPEDIDO) as PedidoNuevo;

            pedido.FecPedido = DateTime.Parse(txtFecha.Text);


            pedidoBL.RegistrarPedido(pedido);
        }

        protected void btnQuitar_Click(object sender, EventArgs e)
        {
            var producto = Cache.Get(VARPRODUCTO) as ProdPed;
            var cantidad = decimal.Parse(txtCant.Text);
            var precio = decimal.Parse(txtPrecio.Text);

            DetallePedido newDetalle = new DetallePedido()
            {
                Producto = producto,
                IdProducto = producto.idProducto,
                Precio = precio,
                Cantidad = cantidad,
            };

            var pedido = Cache.Get(VARPEDIDO) as PedidoNuevo;
            newDetalle.Monto = precio * cantidad;
            pedido.DetallePedido.Add(newDetalle);
            pedido.Total = pedido.DetallePedido.Sum(p => p.Monto);


            PedidoDataBind(pedido);

        }
	}
}